#ifndef __ABSTRACT_PROTOTYPE_HPP__
#define __ABSTRACT_PROTOTYPE_HPP__

#include <iostream>
using std::cout;
using std::endl;

class AbstractPrototype {
public:
	virtual ~AbstractPrototype() { cout<<__func__<<endl; }
	virtual AbstractPrototype *clone() const = 0;
	void setNumber(int num) {number = num;}
	int getNumber() const { return number; }
protected:
	AbstractPrototype():number(100) { cout<<__func__<<endl; }
private:
	int number;
};

#endif /* end of include guard */
